package com.qqtech.qquan.user.service;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.qqtech.core.common.exception.BizzException;
import com.qqtech.core.frame.service.BaseService;
import com.qqtech.qquan.user.model.UserValue;
import com.qqtech.qquan.user.model.UserValueQuery;
import com.qqtech.qquan.user.model.UserValueVo;

import java.util.List;

public interface UserValueService extends BaseService<UserValue> {
	/**
	 * 减少抽奖
	 * 
	 * @param id
	 * @return
	 */
	int updateMinusDrawCount(Integer id);

	/**
	 * 增加抽奖
	 * 
	 * @param id
	 */
	public int updateDrawCount(Integer id);

	/**
	 * 按社区查询-荣誉榜
	 * 
	 * @param id
	 */
	public Page<UserValueVo> queryUserInfo(UserValueQuery query, Pageable pageable);

	/**
	 * 按距离查询-附近的人
	 * 
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<UserValueVo> queryPageListByDistance(UserValue query, Pageable pageable);

	/**
	 * 变更某用户可提现的产值(money)
	 * 
	 * @param userId
	 *            用户id
	 * @param alterValue
	 *            变更的值
	 */
	void alterMoney(int userId, int alterValue);

	/**
	 * 设置是否显示定位
	 * 
	 * @param userId
	 * @param isShowLocation
	 * @return
	 * @throws BizzException
	 */
	int setShowLocation(Integer userId, boolean isShowLocation) throws BizzException;

	/**
	 * 是否显示定位信息
	 * 
	 * @param userId
	 * @return
	 */
	boolean isShowLocation(Integer userId);

	/**
	 * 变更某用户的推送设备信息
	 * 
	 * @param userId
	 * @param registrationId
	 */
	void alterRegistrationId(int userId, String registrationId);

	/**
	 * 变更某用户的圈币
	 * 
	 * @param userId
	 *            用户id
	 * @param alterQuanValue
	 *            变更的值
	 */
	void alterQuanValue(int userId, int alterQuanValue);

	/**
	 * 变更某用户荣誉值(HonorValue)
	 * 
	 * @param userId
	 *            用户id
	 * @param alterHonorValue
	 *            变更的值
	 */
	void alterHonorValue(int userId, int alterHonorValue);

	/**
	 * 按照社区id查询发帖达人
	 * @param query
	 * @param pageable
	 * @return
	 */
	Page<UserValueVo> queryPageListByTalent(UserValueQuery query, Pageable pageable);

	/**
	 * 根据用户查询荣耀值
	 * @param userId
	 * @return
	 */
	UserValueVo queryByUserId(Integer userId);

	List<UserValueVo> queryByUserIds(List<Integer> userIds);
}